import logging.handlers
import os
import time


class GetLogger:
    logger = None

    # 获取logger
    @classmethod
    def get_logger(cls):
        if cls.logger is None:
            # 获取logger日志器，并设置名称为“admin”
            cls.logger = logging.getLogger("admin")
            # 设置日志级别
            cls.logger.setLevel(logging.INFO)
            # 获取控制台处理器
            sh = logging.StreamHandler()
            # 获取 文件处理器 根据时间分割
            log_file = "../log/{}.log".format(time.strftime("%Y_%m_%d %H_%M_%S"))
            th = logging.handlers.TimedRotatingFileHandler(log_file,
                                                           when='S',
                                                           interval=1,
                                                           backupCount=3,
                                                           encoding="utf-8")

            # 自定义namer函数，去掉备份文件的时间戳后缀
            def namer(default_name):
                # 默认的文件名格式为: log_name.log.YYYY-MM-DD_HH-MM-SS
                # 我们只需要保留log_name.log
                base_filename = os.path.basename(log_file)
                return os.path.join(os.path.dirname(default_name), base_filename)

            th.namer = namer

            # 设置 文件处理器 日志级别
            th.setLevel(logging.ERROR)  # 日志中存储ERROR类型的日志
            # 获取 格式器
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s %(funcName)s %(lineno)d] - %(message)s"
            fm = logging.Formatter(fmt)
            # 将 格式器 添加到 处理器
            sh.setFormatter(fm)
            th.setFormatter(fm)
            # 将 处理器 添加到 日志器
            cls.logger.addHandler(sh)
            cls.logger.addHandler(th)
        # 返回日志器
        return cls.logger


if __name__ == '__main__':
    logger = GetLogger.get_logger()
    # 日志器应用
    logger.info("这是info日志信息")
    logger.debug("这是debug日志信息")
    logger.warning("这是warning日志信息")
    logger.error("这是error日志信息")
